package com.company.nowcoder;

import java.util.Map;
import java.util.Scanner;
import java.util.SortedMap;
import java.util.TreeMap;

/**
 * @author jrue
 * @description https://www.nowcoder.com/practice/46e837a4ea9144f5ad2021658cb54c4d?tpId=98&tqId=32824&rp=1&ru=%2Fta%2F2019test&qru=%2Fta%2F2019test%2Fquestion-ranking&tPage=1
 * @date 2019/12/5 9:36
 * 为了找到自己满意的工作，牛牛收集了每种工作的难度和报酬。
 * 牛牛选工作的标准是在难度不超过自身能力值的情况下，牛牛选择报酬最高的工作。在牛牛选定了自己的工作后，
 * 牛牛的小伙伴们来找牛牛帮忙选工作，牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了，于是他只好把这个任务交给了你。
 * 输入描述:
 * 每个输入包含一个测试用例。
 * 每个测试用例的第一行包含两个正整数，分别表示工作的数量N(N<=100000)和小伙伴的数量M(M<=100000)。
 * 接下来的N行每行包含两个正整数，分别表示该项工作的难度Di(Di<=1000000000)和报酬Pi(Pi<=1000000000)。
 * 接下来的一行包含M个正整数，分别表示M个小伙伴的能力值Ai(Ai<=1000000000)。2147483647 1000000000
 * 保证不存在两项工作的报酬相同。
 * 输出描述:
 * 对于每个小伙伴，在单独的一行输出一个正整数表示他能得到的最高报酬。一个工作可以被多个人选择。
 *
 * 输入
 * 3 3
 * 1 100
 * 10 1000
 * 1000000000 1001
 * 9 10 1000000000
 *
 * 输出
 * 100
 * 1000
 * 1001
 */
import java.util.*;

public class ApplyJob{

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        SortedMap<Integer,Integer> map = new TreeMap<>();
        int[] di = new int[n];
        for (int i = 0; i< n;i++) {
            int d = sc.nextInt();
            di[i] = d;
            map.put(d,sc.nextInt());
        }
        Arrays.sort(di);
        for (int i = 0; i < m; i++) {
            int c = sc.nextInt();
            int max = 0;
            for (int i1 = 0; i1 < di.length; i1++) {
                if (c < di[i]) {
                    break;
                } else {
                    max = Math.max(max,map.get(di[i]));
                }
            }
            System.out.println(max);
        }
    }
}